package com.amado.course50java8;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

public class Java804MethodRefernce2 {
	public static Java804MethodRefernce2 create(final Supplier<Java804MethodRefernce2> supplier) {
		return supplier.get();
	}

	public static void collide(final Java804MethodRefernce2 car) {
		System.out.println("Collided " + car.toString());
	}

	public static void collide() {
		System.out.println("Collided ");
	}

	public static void repair(final Java804MethodRefernce2 car) {
		System.out.println("Collided " + car.toString());
	}

	public void follow(Java804MethodRefernce2 another) {
		System.out.println("Following the " + another.toString());
	}

	// public void repair() {
	// System.out.println("Repaired " + this.toString());
	// }

	public static void main(String[] args) {
		// 语法是Class::new，或者更一般的Class< T >::new。请注意构造器没有参数。
		final Java804MethodRefernce2 car = Java804MethodRefernce2.create(Java804MethodRefernce2::new);// 构造函数调用
		final List<Java804MethodRefernce2> cars = Arrays.asList(car);
		// 自动去调用collide(),static collide(Car car)
		// 语法是Class::static_method。请注意这个方法接受一个Car类型的参数。
		cars.forEach(Java804MethodRefernce2::collide);// 静态函数调用
		// 自动去调用collide(),static repair(Car car)
		// 语法是Class::method。请注意，这个方法没有参数。
		cars.forEach(Java804MethodRefernce2::repair);// 特定类的函数函数调用
		final Java804MethodRefernce2 police = Java804MethodRefernce2.create(Java804MethodRefernce2::new);
		// 自动去调用police.follow(Java805Car another)
		// 语法是instance::method。请注意，这个方法接受一个Car类型的参数
		cars.forEach(police::follow);// 特定函数调用
	}
}
